package com.doit.day06


//和java中的接口一样，但是比java中的接口功能丰富得多

//抽象类也好  接口也好，创建抽象类的对象和创建接口的对象都有两种方法
//1,写一个子类 继承或者实现这个抽象类，然后重写里面的抽象方法  最后new 写的这个类的对象
//2,直接new 这个接口或者抽象类  重写里面的抽象方法  得到的对象也就是这个接口或者抽象类的实现类对象


object _02_接口_特质 {
  def main(args: Array[String]): Unit = {
    val smallQue: Bird = new Bird
//    smallQue.shimofang
//    smallQue.shenglong

/*    val brid1 = new Fly {
      override def add(a: Int, b: Int) = a+b

      override val id: Int = 1
    }
    */

    //在对象上实现特质，让某一个对象拥有特殊的功能，这种操作 scala特有  叫特质的动态混入
    val fenHuang = new Bird with FenHuang with XiaoFeng {
      override def shimofang(): Unit = println("biu biu biu ~~~ 把晶晶变成公主，不给她穿水晶鞋")
      override def yuLongGongWu(): Unit = println("龙凤呈祥 ==》 20一包")

      override def shengLong: Unit = println("拉了一条龙出来")
    }

    fenHuang.shimofang()

    fenHuang.yuLongGongWu()

  }
}

trait XiaoFeng{
  def shengLong
}


trait FenHuang{
  def shimofang()

  def yuLongGongWu()
}


trait Fly{
  //抽象方法
  def add(a:Int,b:Int):Int

  //具体的方法
  def fly()={
    println("飞起来")
  }

  //抽象属性
  val id:Int

  //具体的属性
  val name:String = "shaoye"
}

trait Jump{
  def jump()
}

class Bird extends Fly with Jump /*with FenHuang*/ {
  override def add(a: Int, b: Int): Int = a+b

  override val id: Int = 1

  override def jump(): Unit = println("跳起来")

//  override def shimofang(): Unit = println("biu biu biu ~~~ 把晶晶变成公主，不给她穿水晶鞋")
//  override def yuLongGongWu(): Unit = println("龙凤呈祥 ==》 20一包")
}




